﻿//   Copyright © 2009-2020 John Sheehan, Andrew Young, Alexey Zimarev and RestSharp community
//
//   Licensed under the Apache License, Version 2.0 (the "License");
//   you may not use this file except in compliance with the License.
//   You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
//   Unless required by applicable law or agreed to in writing, software
//   distributed under the License is distributed on an "AS IS" BASIS,
//   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
//   See the License for the specific language governing permissions and
//   limitations under the License. 

using System;
using System.Net;

namespace RestSharp.Authenticators
{
    /// <summary>
    /// Tries to Authenticate with the credentials of the currently logged in user, or impersonate a user
    /// </summary>
    public class NtlmAuthenticator : IAuthenticator
    {
        readonly ICredentials _credentials;

        /// <summary>
        /// Authenticate with the credentials of the currently logged in user
        /// </summary>
        public NtlmAuthenticator() : this(CredentialCache.DefaultCredentials) { }

        /// <summary>
        /// Authenticate by impersonation
        /// </summary>
        /// <param name="username"></param>
        /// <param name="password"></param>
        public NtlmAuthenticator(string username, string password)
            : this(new NetworkCredential(username, password)) { }

        /// <summary>
        /// Authenticate by impersonation, using an existing <c>ICredentials</c> instance
        /// </summary>
        /// <param name="credentials"></param>
        public NtlmAuthenticator(ICredentials credentials) => this._credentials = credentials ?? throw new ArgumentNullException(nameof(credentials));

        public void Authenticate(IRestClient client, IRestRequest request) => request.Credentials = _credentials;
    }
}